Hellforge General Crackme I
by LaZaRuS


Tutorial de Lucifer48 [Immortal Descendants]
(14 ao√t 1999)



La bonne combinaison de touches est: ALT GR + D
Go, go, go...

Je remplis mon nom et un serial j'appuie sur le boutton (bpx hmemcpy, comme d'habitude).
XXXX:00401759  CALL 0041F074		;on sort d'ici
XXXX:0040175E  LEA  EAX,[EBP-04]
XXXX:00401761  CALL 00445784		;taille du nom
XXXX:00401766  CMP  EAX,04		;5 caractΦres minimum
XXXX:00401769  LEA  EAX,[EBP-04]
XXXX:0040176C  SETG DL
XXXX:0040176F  AND  EDX,01
XXXX:00401772  PUSH EDX
...
XXXX:00401780  POP  ECX
XXXX:00401781  TEST CL,CL
XXXX:00401783  JZ   00401E90		;no jump = taille du nom OK
Plus loin:
XXXX:004017C4  LEA  EDX,[EBP-0C]	;dword ptr [edx] = 0
XXXX:004017C7  POP  EAX			;dword ptr [eax] = notre serial
XXXX:004017C8  CALL 0044576C		;y'a t-il un serial d'entrΘ ?
XXXX:004017CD  PUSH EAX			;eax=1 ou eax=0
...
XXXX:004017EE  POP  ECX
XXXX:004017EF  TEST CL,CL
XXXX:004017F1  JZ   00401E49		;no jump = un serial est dans l'edit box
Maintenant commence les calculs...
XXXX:0040182B  MOVSX ECX,BYTE PTR [EAX]	;lit le premier caractΦre du nom
XXXX:0040182E  MOV   EAX,ECX
XXXX:00401830  MOV   EDX,00000002
XXXX:00401835  SHL   EAX,04
XXXX:00401838  ADD   EAX,ECX
XXXX:0040183A  ADD   EAX,0000004D2	;+1234
XXXX:0040183F  MOV   [EBP-00A0],EAX
Pour mon nom j'obtiens:
4Ch*10h + 4Ch + 4D2h = 4C0h + 4Ch + 4D2h = 9DEh
XXXX:00401884  MOVSX ECX,BYTE PTR [EAX] ;lit le quatriΦme caractΦre du nom
XXXX:00401887  MOV  EAX,ECX
XXXX:00401889  SHL  EAX,02
XXXX:0040188C  LEA  EAX,[EAX*2+EAX]	;3*eax
XXXX:0040188F  ADD  [EBP-00A0],EAX
Pour mon nom j'obtiens:
69h*4*3 = 69h*Ch = 4ECh
[EBP-00A0] = 4ECh + 9DEh = ECAh
C'est maintenant qu'on arrive au tricky moment:
XXXX:004018F0  MOV  EDX,[EAX+000001FC]
XXXX:004018F6  CMP  ECX,EDX
XXXX:004018F8  JZ   00401D4E		;jump = mauvais chemin
Je me suis demandΘ pourquoi j'avais tout le temps ecx=ecx, je sentais bien qu'il ne fallait pas jumper pour rΘsoudre le crackme. J'ai donc eu l'idΘe de modifier mon serial et lα, τa a marchΘ, j'en ai donc conclu que pour rΘsoudre le crackme, il ne faut pas appuyer/cliquer sur le boutton "Check Serial", c'est une voie de garage. Et donc on peut continuer; on arrive α une boucle:
XXXX:004019F9  MOV  ECX,[EBP-00A4]
XXXX:004019FF  CMP  ECX,000003E8	;1000
XXXX:00401A05  JL   00401966
Cette (grosse) boucle ne sert α rien... Voila les vrais calculs.
XXXX:00401A3F  MOVSX ECX,BYTE PTR [EAX] ;lit le premier caractΦre du nom
XXXX:00401A42  MOV  EAX,ECX
XXXX:00401A44  MOV  EDX,00000002
XXXX:00401A49  SHL  EAX,02
XXXX:00401A4C  LEA  EAX,[EAX*2+EAX]	;3*eax
XXXX:00401A4F  ADD  EAX,00003039	;12345
XXXX:00401A54  MOV  [EBP-00A0],EAX	;MOV et pas ADD (nos calculs prΘcΘdents sont donc inutiles)
...
XXXX:00401A99  MOVSX ECX,BYTE PTR [EAX] ;lit le quatriΦme caractΦre du nom
XXXX:00401A9C  MOV  EAX,ECX
XXXX:00401A9E  SHL  EAX,03
XXXX:00401AA1  SUB  EAX,ECX
XXXX:00401AA3  LEA  EAX,[EAX*2+EAX]	;3*eax
XXXX:00401AA6  ADD  [EBP-00A0],EAX
...
XXXX:00401ABC  MOV  ECX,[EBP-00A0]
XXXX:00401AC2  IMUL ECX,[EBP-00A0]
XXXX:00401AC9  MOV  [EBP-00A0],ECX
...
XXXX:00401AFE  IMUL EAX,[EBP-00A0]	;eax: taille du nom
XXXX:00401B05  MOV  [EBP-00A0],EAX
Soient X1 et X4 le premier et quatriΦme caractΦre du nom, voilα la formule magique:

( ( ( 0Ch*X1 + 3039h ) + (15h*X4) )^2 )* taille-du-nom
Pour mon nom, j'obtient (X1=4C et X4=69):
0Ch * 4Ch + 3039h = 33C9h
15h * 69h = 89Dh
et (33C9h + 89Dh)^2 * 9 = 3C66h^2 * 9 = 803FBDC4h
On approche de la fin:
XXXX:00401B3E  MOV  EDX,[EBP-00A0]
XXXX:00401B44  CALL 00445614		;conversion signΘe α la wsprintf
...
XXXX:00401B7E  LEA  EAX,[EBP-38]	;notre serial...
XXXX:00401B81  POP  EDX			;le bon serial
XXXX:00401B82  CALL 00445754		;comparaison
XXXX:00401B87  PUSH EAX
...
XXXX:00401BC8  POP  ECX
XXXX:00401BC9  TEST CL,CL		;si cl=0: mauvais serial
XXXX:00401BCB  JZ   00445684
Et finalement:

Name/ Lucifer48
Serial/ -2143306300-LaZaRuS

Name/ Lucifer48/ID
Serial/ -1426085968-LaZaRuS

Mission successful sir !

Greetings: All ID members (Volatility, Torn@do, ...), Eternal Bliss, ACiD BuRN, Duelist, LaZaRuS, people on #cracking4newbies, french crackers, and other crackme makers.



(c) Lucifer48. All rights reversed